const jwt = require("jsonwebtoken");
// 账号密码数据，存在内存中
const users = [
  {
    username: "admin",
    password: "123456",
  },
];
module.exports = function (req, res, next) {
  
  // req: 请求对象；res: 接口返回数据对象; next: 调用时把控制权传递给下一个中间件
  if (req.method == "POST" && req.path === "/login") {
    const { username, password } = req.body;
    if (users.find((d) => d.username == username && d.password == password)) {
      // jwt.sign的第二个参数，是固定的字符串，只需要保证，加密和解密
      // 的时候使用的是同一个字符串，就能够正常的加密解密
      const token = jwt.sign({ username }, "2407A"); // "82617y378123g"
      console.log(token, "| token");
      
      return res.status(200).json({
        msg: "登录成功",
        data: token,
      });
    } else {
      return res.status(500).json({
        msg: "登录失败，账号密码错误",
        data: "",
      });
    }
  }

  if (req.method == "POST" && req.path === "/register") {
    const { username, password } = req.body;
    // 判断用户名是否已经存在
    const flag = users.find((d) => d.username == username);
    if (username && password && password.length > 3 && !flag) {
      users.push({ username, password });
      return res.status(200).json({
        msg: "注册成功",
        data: "",
      });
    } else {
      return res.status(200).json({
        msg: "用户名已经存在",
        data: "",
      });
    }
  }

  // 后续的所有请求，都需要在header上带上token
  // 接口程序在去到请求之后解析出来token
  try {
    jwt.verify(req.headers.token, "2402A");
  } catch (e) {
    return res.status(200).json({
      msg: "token已失效",
    });
  }
  next();
};
